/**
 * 存入缓存
 * @param {string} key 键
 * @param {any} data 值
 * @param {boolean} encrypt 是否加密
 */
const setStorage = (key, data, encrypt = true) => {
    wx.setStorage({ key, data, encrypt });
}

/**
 * 取出缓存
 * @param {string} key 键
 * @param {boolean} encrypt 是否加密
 */
const getStorage = (key, encrypt = true) => new Promise((t, f) => {
    wx.getStorage({
        key, encrypt,
        success(res) {
            t(res.data);
        },
        fail(rej) {
            t(null);
        }
    })
})

/**
 * 移除缓存
 * @param {*} key 键
 */
const removeStorage = key => {
    wx.removeStorage({ key })
}

// 清空缓存
const clearStorage = () => {
    wx.clearStorage();
}

/**
 * 模态框
 * @param {*} title 提示标题
 * @param {*} content 提示内容
 * @param {*} showCancel 是否显示取消按钮
 * @param {*} cancelText 左侧按钮文案
 * @param {*} confirmText 右侧按钮文案
 */
const showModal = (title, content, showCancel = true, cancelText = '取消', confirmText = '确定') => new Promise((t, f) => {
    wx.showModal({
        title,content,showCancel,cancelText,confirmText,
        success(res) {
            if (res.confirm) {
                t(true)
            } else if (res.cancel) {
                t(false)
            }
        }
    })
})

/**
 * 显示消息提示框
 * @param {*} title 提示内容
 * @param {*} icon success-成功 error-失败 loading-加载 none-不显示图标
 * @param {*} duration 提示的延迟时间
 */
const showToast = (title, icon = 'none', duration = 1500) => {
    wx.showToast({ title,icon,duration });
}

/**
 * 显示加载
 * @param {string} title 标题
 */
const show = (title = '加载中') => {
    wx.showLoading({
        title
    })
}

/**
 * 隐藏加载
 */
const hide = () => {
    wx.hideLoading()
}

/**
 * 保留当前页面，跳转到应用内的某个页面
 * @param {*} url 路径
 */
const navigateTo = url => {
    wx.navigateTo({ url });
}

/**
 * 跳转到 tabBar 页面，并关闭其他所有非 tabBar 页面
 * @param {*} url 路径
 */
const switchTab = url => {
    wx.switchTab({ url });
}

/**
 * 关闭当前页面，返回上一页面或多级页面
 * @param {*} delta 
 */
const navigateBack = (delta) => {
    wx.navigateBack({ delta });
}

/**
 * 正则校验手机号
 * @param {*} phone 手机号
 * @return {boolean}
 */
const checkPhone = (phone) => {
    return /^[1][3,4,5,7,8,9][0-9]{9}$/.test(phone);
}

/**
 * 生成随机数 [n,m]
 * @param {*} n 最小值
 * @param {*} m 最大值
 */
const round = (n,m) => {
    return Math.round(Math.random() * (m - n) + n);
}

/**
 * 底部弹出操作菜单
 * @param {Array} itemList 菜单项
 */
const showActionSheet = (itemList) => new Promise((t, f) => {
    wx.showActionSheet({
        itemList,
        success: (res) => {
            t(res.tapIndex)
        }
    })
})

/**
 * 从本地上传图片 or 视频
 * @param {*} count 数量
 */
const chooseMedia = (count) => new Promise((t,f) => {
    wx.chooseMedia({ count }).then(res => {
        t(res.tempFiles);
    })
})

export {
    setStorage,     // 存入缓存
    getStorage,     // 取出缓存 promise
    removeStorage,  // 移除缓存
    clearStorage,   // 清空缓存
    showModal,      // 模态框
    showToast,      // 消息提示框
    show,           // 显示加载
    hide,           // 隐藏加载
    navigateTo,     // 保留当前页面，跳转到应用内的某个页面
    switchTab,      // 跳转到 tabBar 页面，并关闭其他所有非 tabBar 页面
    navigateBack,   // 关闭当前页面，返回上一页面或多级页面
    checkPhone,     // 正则校验手机号
    round,          // 生成随机数 [n,m]
    showActionSheet,// 底部弹出操作菜单
    chooseMedia,    // 从本地上传图片 or 视频
}